import path from "path";
import i18n from "@/i18n";
/**
 * 筛选出可供搜索的路由对象
 * @param routes 通过filterRouters方法生成的路由表
 * @param basePath 基础路径，默认为 /
 * @param prefixTitle 默认是一个数组，以父子层级的形式进行表示，比如[
 "用户",
 "用户管理"
 ]
 */
export const generateRoutes = (routes, basePath = "/", prefixTitle = []) => {
    // 创建 result 数据
    let res = [];
    // 循环 routes 路由
    for (const route of routes) {
        // 创建包含 path 和 title 的 item
        const data = {
            // path由父级路径和当前路由路径两部分组成，所以这里引入path模块
            path: path.resolve(basePath, route.path),
            title: [...prefixTitle]
        };
        // 当前存在 meta 时，使用 i18n 解析国际化数据，组合成新的 title 内容
        // 动态路由不允许被搜索!re.exec(route.path)
        // 匹配动态路由的正则
        const re = /.*\/:.*/; // 当前路由path里面包含冒号就认为是动态路由
        if (route.meta && route.meta.title && !re.exec(route.path)) {
            const i18ntitle = i18n.global.t(`msg.route.${route.meta.title}`);
            // 当前data.title与i18ntitle进行合并
            data.title = [...data.title, i18ntitle];
            res.push(data);
        }

        // 存在 children 时，迭代调用
        if (route.children) {
            // generateRoutes(route.children, 当前父路由的path, 当前父路由的title)
            const tempRoutes = generateRoutes(route.children, data.path, data.title);
            if (tempRoutes.length >= 1) {
                res = [...res, ...tempRoutes];
            }
        }
    }
    return res;
};